From: Jan D. Date: Sat, 29 Jan 2011 11:30:11 +0000 (+0100) Subject: Handle nul-character in copy/paste (Bug#7934). X-Git-Tag: archive/raspbian/1%29.2+1-2+rpi1~1^2~324^2~5024 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https:/www.github.com/%22bookmarks:///%22http:/www.example.com/cgi/%22https:/www.github.com/%22bookmarks:/?a=commitdiff_plain;h=9a8f10f408c861132c27e8b69779e5315039043b;p=emacs.git Handle nul-character in copy/paste (Bug#7934). * nsselect.m (ns_string_from_pasteboard): Get length of string and use make_string instead of build_string. (ns_string_to_pasteboard_internal): Use initWithBytesNoCopy instead of stringWithUTF8String (Bug#7934). --- diff --git a/src/ChangeLog b/src/ChangeLog index b9e2083ed20..b3df85d638d 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2011-01-29 Jan Djärv + + * nsselect.m (ns_string_from_pasteboard): Get length of string + and use make_string instead of build_string (Bug#7934). + (ns_string_to_pasteboard_internal): Use initWithBytesNoCopy + instead of stringWithUTF8String (Bug#7934). + 2011-01-29 Anders Lindgren (tiny change) * nsfont.m (nsfont_open): Ensure that fonts with inexact diff --git a/src/nsselect.m b/src/nsselect.m index d9e9e7d524c..299a24e4a8c 100644 --- a/src/nsselect.m +++ b/src/nsselect.m @@ -153,8 +153,10 @@ ns_string_to_pasteboard_internal (id pb, Lisp_Object str, NSString *gtype) CHECK_STRING (str); utfStr = SDATA (str); - nsStr = [NSString stringWithUTF8String: utfStr]; - + nsStr = [[NSString alloc] initWithBytesNoCopy: utfStr + length: SBYTES (str) + encoding: NSUTF8StringEncoding + freeWhenDone: NO]; if (gtype == nil) { [pb declareTypes: ns_send_types owner: nil]; @@ -166,6 +168,7 @@ ns_string_to_pasteboard_internal (id pb, Lisp_Object str, NSString *gtype) { [pb setString: nsStr forType: gtype]; } + [nsStr release]; } } @@ -303,6 +306,7 @@ ns_string_from_pasteboard (id pb) { NSString *type, *str; const char *utfStr; + int length; type = [pb availableTypeFromArray: ns_return_types]; if (type == nil) @@ -344,17 +348,23 @@ ns_string_from_pasteboard (id pb) options: NSLiteralSearch range: NSMakeRange (0, [mstr length])]; utfStr = [mstr UTF8String]; - if (!utfStr) - utfStr = [mstr cString]; + length = [mstr lengthOfBytesUsingEncoding: NSUTF8StringEncoding]; + + if (!utfStr) + { + utfStr = [mstr cString]; + length = strlen (utfStr); + } } NS_HANDLER { message1 ("ns_string_from_pasteboard: UTF8String failed\n"); utfStr = [str lossyCString]; + length = strlen (utfStr); } NS_ENDHANDLER - return build_string (utfStr); + return make_string (utfStr, length); }